package com.qf.juc.demo.executor;

import java.util.concurrent.*;

public class Demo1 {

    public static  // 自定义线程池！工作 ThreadPoolExecutor
            ExecutorService threadPool = new ThreadPoolExecutor(
            2,// int corePoolSize, 核心线程池大小(候客区窗口2个)
            5,// int maximumPoolSize, 最大核心线程池大小(总共5个窗口)
            3,// long keepAliveTime, 超时3秒没有人调用就会释，放关闭窗口
            TimeUnit.SECONDS,// TimeUnit unit, 超时单位 秒
            new LinkedBlockingDeque<>(3),// 阻塞队列(候客区最多3人)
            Executors.defaultThreadFactory(),// 默认线程工厂
            // 4种拒绝策略之一：
            // 队列满了，尝试去和 最早的竞争，也不会抛出异常！
            new ThreadPoolExecutor.DiscardPolicy()
//                new ThreadPoolExecutor.

    );
    public static void main(String[] args) {

//        ExecutorService executorService = Executors.newSingleThreadExecutor();
//        Executors.newCachedThreadPool();
//        Executors.newFixedThreadPool(5);
        //队列满了，尝试去和最早的竞争，也不会抛出异常！
        try {
            // 最大承载：Deque + max
            // 超过 RejectedExecutionException
            for (int i = 1; i <= 10; i++) {
                // 使用了线程池之后，使用线程池来创建线程
                threadPool.execute(()->{
                    System.out.println(
                            Thread.currentThread().getName()+" ok");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 线程池用完，程序结束，关闭线程池
            threadPool.shutdown();
        }
    }
}
